前回はCakePHPを使ってローカル環境でのメール機能の実装方法について紹介しました。
今回はCakePHPでTwitterのWebAPIを使用して、ツイート内容を画面に表示する処理を実装してみようと思います。
今回はCakePHPでTwitterのWebAPIを使用して、ツイート内容を画面に表示する処理を実装してみようと思います。



 
 
 

 
 

    /**
     * TwitterAPI
     *
     */
    public function twitter()
    {
        // ①エンドポイントを指定
        $base_url = 'https://api.twitter.com/2/tweets/search/recent';
        // ②検索条件を指定
        $data = [
            'query' => 'CakePHP',
            'sort_order' => 'recency',
            'expansions' => 'author_id',
            'user.fields' => 'name,username,profile_image_url'
        ];
        // ③ヘッダ生成
        // 取得したBearer Tokenをセット
        $api  = Configure::read("twitter_api");
        $token = $api['bearer_token'];
        $option = [
            'headers' => [
                'Authorization' => 'Bearer ' . $token,
                'Content-Type' => 'application/json'
            ]
        ];
        // ④リクエストする
        $http = new Client();
        $response = $http->get($base_url, $data, $option);
        if (!$response->isOk()) {
            exit;
        }
        // ⑤JSON形式のレスポンス結果を取得する
        $result = $response->getJson();
        if (empty($result)) {
            exit;
        }
        // ⑥ユーザ数とツイート本文の数は一致しないため、ユーザ情報を配列にまとめておく
        $user_data = [];
        $user_cnt = count($result['includes']['users']);
        for ($i=0; $i < $user_cnt; $i++) {
            $id = $result['includes']['users'][$i]['id'];
            $user_data[$id] = [
                'name' => $result['includes']['users'][$i]['name'],
                'username' => $result['includes']['users'][$i]['username'],
                'icon' => $result['includes']['users'][$i]['profile_image_url'],
            ];
        }
        $tweet_list = [];
        foreach ($result['data'] as $tweet_data) {
            $id = $tweet_data['author_id'];
            $text = $tweet_data['text'];
            $name = $user_data[$id]['name'];
            $username = $user_data[$id]['username'];
            $tweet
今回は見えやすくしたいため、cssにも手を加えています。
../cake_pjt/webroot/css/cake.css.tweet { margin: 2em 0; background: #dcefff; } .tweet .tweet-head { font-size: 1.2em; background: #5fb3f5; padding: 4px; text-align: left; color: #FFF; font-weight: bold; letter-spacing: 0.05em; } .tweet p { padding: 15px 20px; margin: 0; }